package com.example.function;

import java.util.function.Function;

/**
 * 高阶函数  以函数为返回值或参数的方法
 *
 * @author hej
 * @date 2022/11/3 16:44
 */
public class HighFunction {
    public static void main(String[] args) {

        Function<String, String> transform = transform(str -> {
            return str.substring(0, 2);
        });

        String s = transform.apply("abcdefg");
        System.out.println(s);
    }

    /**
     *   Function
     *      apply
     *      将该函数应用到给定的参数
     *      * @param t 函数的参数
     *      * @return 函数的结果
     *        R apply(T t);
     *
            compose
            先执行后一个，再执行前一个

            andThen
            先执行第一个，在执行后一个

     * @param f
     * @return
     */
    public static Function<String, String> transform(Function<String, String> f) {
        return f.andThen(String::toUpperCase);
    }
}
